<?php

namespace app\task;

use app\api\controller\news\VnNewsController;
use support\Log;
use Workerman\Crontab\Crontab;

class Task
{
    public function onWorkerStart()
    {

        // 每小时的第0分第0秒执行
        // new Crontab('0 0 * * * *', function(){
        //     $exchangerate = new \app\service\http\exchangerate\Exchangerate();
        //     try {
        //         $data = $exchangerate->latest('CNY');
        //         Log::channel('ApiResponse')->info("汇率更新成功：");
        //     } catch (\Exception $e) {
        //         Log::channel('ApiResponse')->error("汇率更新失败：", [$e->getMessage()]);
        //     }
        // });

        // 每日 06:00 抓取越南新闻（中文）
        new Crontab('0 0 6 * * *', function () {
            try {
                (new VnNewsController())->sync();
            } catch (\Throwable $e) {
                Log::channel('ApiResponse')->error("越南新闻每日抓取失败", [$e->getMessage()]);
            }
        });

        // 一分钟执行一次
        new Crontab('0 */1 * * * *', function () {
            /*echo '每分钟检查: ' . date('Y-m-d H:i:s') . "\n";

            // Redis键名
            $redisKey = 'social_post_last_time';

            // 分钟
            $intervalMinutes = 288; // 288分钟

            try {
                // 获取上次执行时间
                $lastPostTime = Redis::get($redisKey);
                $currentTime = time();
                // 如果是第一次执行或已经过了间隔时间
                if (!$lastPostTime || ($currentTime - $lastPostTime) >= $intervalMinutes * 60) {
                    echo "满足发布条件，开始发布动态\n";
                    $social = new \app\service\http\yzt\social\Social();
                    $res = $social->send();

                    // 记录成功日志
                    Log::channel('ApiResponse')->info("动态发布成功", [
                        'response' => $res,
                        'post_time' => date('Y-m-d H:i:s', $currentTime),
                        'interval' => $intervalMinutes . '分钟'
                    ]);

                    // 更新Redis中的执行时间
                    Redis::setEx($redisKey,3600, $currentTime);

                    // 计算下次执行时间
                    $nextPostTime = $currentTime + $intervalMinutes * 60;
                    echo "下次发布时间: " . date('Y-m-d H:i:s', $nextPostTime) . "\n";
                } else {

                    // 计算剩余时间
                    $remainingSeconds = $intervalMinutes * 60 - ($currentTime - $lastPostTime);
                    $remainingMinutes = ceil($remainingSeconds / 60);

                    echo "未到发布时间，还需等待约 {$remainingMinutes} 分钟\n";
                    Log::channel('ApiResponse')->info("动态发布跳过", [
                        'last_post_time' => date('Y-m-d H:i:s', $lastPostTime),
                        'next_post_time' => date('Y-m-d H:i:s', $lastPostTime + $intervalMinutes * 60),
                        'remaining_minutes' => $remainingMinutes
                    ]);
                }
            } catch (\Exception $e) {
                // 记录错误日志
                Log::channel('ApiResponse')->error("动态发布异常", [
                    'error' => $e->getMessage(),
                    'trace' => $e->getTraceAsString(),
                    'time' => date('Y-m-d H:i:s')
                ]);

                echo "发布动态出错: " . $e->getMessage() . "\n";
            }*/
        });
    }
}
